Une pile (stack en anglais) est une structure de données où les éléments sont « empilés ». Ceci implique la caractéristique principale d’une pile : FILO.
F → first
I → in
L → last
O → out
First in, last out veut dire que le plus tôt qu’un élément est mis dans une pile, le plus tard il en sortira.
Imaginez une pile d’assiette. Si plusieurs assiettes sont empilées, la première placée sera la dernière à être prise. Une assiette est toujours ajoutée sur la pile, et non insérée entre d’autres assiettes. S’il faut retirer une assiette, celle sur le dessus (la dernière ajoutée) sera sélectionnée.
Dans une pile, les opérations principaux sont :
C’est trois opération sont très vite, car il n’y a jamais d’élément à déplacer où de recherche à faire.
Plusieurs saveurs de piles existent, mais les plus populaires sont ceux implémenter avec un tableau fixe ou un tableau dynamique. La majorité des piles sont alors une suite d’éléments contigus en mémoire, c.-à -d. des éléments un à la suite de l’autre sans « trous ».
Les logiciels utilise une pile afin de suivre l’ordre d’appels et de retours de fonctions. Chaque fois qu’une fonction est appelée, elle est placée sur une pile. Quand un return survient, la pile est dépilé. Grâce à la pile, il est possible de suivre le déroulement d’un programme. C’est ainsi que les exceptions sont capables de nous dire d’où elle proviennent, par exemple.
Par exemple, supposons le code suivant :
class Program
{
public static void Main()
{
A(B(2, 5));
}
}
Le programme est en mesure de savoir dans quelle fonction il se situe grâce à une pile.
Voici une visualisation de la pile en fonction du temps d’exécution du programme :
Le programme démarre et la fonction Main est appelée;
[Main]
La fonction B est appelée;
[ B ]
[Main]
Supposons que la fonction B n’appel pas d’autres fonctions. B retourne une valeur;
[Main]
La fonction A est appelée;
[ A ]
[Main]
Supposons que la fonction A **appel une fonction C.
[ C ]
[ A ]
[Main]
Supposons que la fonction C n’appel pas d’autres fonctions. C retourne;
[ A ]
[Main]
Supposons que la fonction A n’appel pas d’autres fonctions. A retourne;
[Main]
La fonction Main ce termine;
La pile est vide, donc c’est la fin du programme !
Placer un breakpoint à chaque moment que la pile veut être inspectée. N’oubliez pas que frapper un breakpoint survient avant d’exécuter la ligne associée.